verilog中的assign(二)

您所在的位置:网站首页 verilog assign用法 verilog中的assign(二)

verilog中的assign(二)

#verilog中的assign(二)| 来源: 网络整理| 查看: 265

一、引入语法的概念

 1、只有寄存器类型的信号才可以在always和initial 语句中进行赋值,类型定义通过reg语句实现。   2、always 语句是一直重复执行,由敏感表(always 语句括号内的变量)中的变量触发。   3、always 语句从0 时刻开始。   4、在begin 和end 之间的语句是顺序执行,属于串行语句。

 

二、总结下几种assign用法:

1.作为信号量输出,通过寄存器连续赋值

output [3:0]oLED;

//internal signal

reg [3:0]sr_LED; //用独热码表示LED亮灯位置。

assign  oLED[3:0] = ~ sr_LED[3:0]; //向LED灯接口输出信号。

2.作为信号量输出,通过寄存器拼接数据位实现。

 

output [15: 0] oSI_DATA;

//internal signal

  reg [ 3: 0] s_HEX;

  reg [ 7: 0] s_SEGBINARY; // s_SEGBINARY[2] should be the DOT

  reg [ 3: 0] s_SEG_SEL;

assign oSI_DATA = {iLED_SEL,s_SEG_SEL,s_SEGBINARY};

3.作为信号量输出,通过判断条件,赋值给信号

 

 

output[ 1: 0] oSEG_STATE;

output        oCP_PLUSE;

wire s_CNTEQCYCLE; 

parameter PARAM_7SEG_CYCLE = 32'd2500000;

reg [ 1: 0] sr_SEG_STATE;

reg [31: 0] sr_cnt;

reg         sr_cp_pluse;  

assign oSEG_STATE = sr_SEG_STATE;

assign oCP_PLUSE = sr_cp_pluse;

 

assign s_CNTEQCYCLE = ( sr_cnt == PARAM_7SEG_CYCLE ) ? 1 : 0;

 

 

 

4.作为输出信号量,通过输入信号量赋值给输出,同样可以输入信号量和寄存器组合逻辑,赋值给输出信号量。 input        iCLK50M; input        iCP_PULSE; input[15:0]  iSI_DATA; output       oSI; output       oCP; reg [ 3: 0] sr_cnt; reg [15: 0] sr_si_data; reg sr_cp; reg sr_en; assign oSI = sr_si_data[15]; assign oCP = sr_en & iCLK50M; 三、对比输出寄存器变量和信号量

下面是功能相同但写法不同的两段代码:

第一段A

module assign_test_a (                        clk,                        lhold,                        lholda );

input clk; input lhold; output lholda;

reg lholda;

always @(posedge clk) if (lhold)  lholda



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3